/**
 * 前端搜索工具类
 * 提供通用的前端搜索和过滤功能，不依赖后端交互
 */
const SearchUtils = {
    
    /**
     * 执行前端搜索
     * @param {Array} dataArray - 要搜索的数据数组
     * @param {string} keyword - 搜索关键词
     * @param {Array} searchFields - 要搜索的字段数组
     * @param {Object} filters - 过滤条件对象
     * @returns {Array} - 搜索和过滤后的结果数组
     */
    search: function(dataArray, keyword, searchFields, filters = {}) {
        if (!Array.isArray(dataArray)) {
            return [];
        }
        
        let results = [...dataArray];
        
        // 先执行关键词搜索
        if (keyword && keyword.trim() !== '') {
            const lowerKeyword = keyword.toLowerCase().trim();
            results = results.filter(item => {
                return searchFields.some(field => {
                    const value = this.getValueByPath(item, field);
                    return value && typeof value === 'string' && value.toLowerCase().includes(lowerKeyword);
                });
            });
        }
        
        // 再执行过滤条件
        if (filters && typeof filters === 'object') {
            Object.keys(filters).forEach(filterKey => {
                const filterValue = filters[filterKey];
                if (filterValue !== undefined && filterValue !== null && filterValue !== '') {
                    results = results.filter(item => {
                        const itemValue = this.getValueByPath(item, filterKey);
                        return itemValue === filterValue;
                    });
                }
            });
        }
        
        return results;
    },
    
    /**
     * 根据路径获取对象中的值
     * @param {Object} obj - 目标对象
     * @param {string} path - 属性路径，支持点表示法，如 'user.name'
     * @returns {*} - 属性值
     */
    getValueByPath: function(obj, path) {
        if (!obj || typeof obj !== 'object' || !path) {
            return null;
        }
        
        const keys = path.split('.');
        let current = obj;
        
        for (const key of keys) {
            if (current === null || current === undefined) {
                return null;
            }
            current = current[key];
        }
        
        return current;
    },
    
    /**
     * 防抖函数
     * @param {Function} func - 要防抖的函数
     * @param {number} delay - 延迟时间（毫秒）
     * @returns {Function} - 防抖处理后的函数
     */
    debounce: function(func, delay) {
        let timeoutId;
        return function(...args) {
            clearTimeout(timeoutId);
            timeoutId = setTimeout(() => func.apply(this, args), delay);
        };
    }
};

// 将SearchUtils对象暴露给全局window对象
if (typeof window !== 'undefined') {
    window.SearchUtils = SearchUtils;
}